package com.bnyy.message.bean.chat.message_data;

import com.bnyy.message.enums.MessageType;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;

import java.util.ArrayList;
import java.util.function.Consumer;

/**
 * Author : 关炳鹏
 * Description :
 * Date : 2023/2/13
 **/
@Table(name = "message_tips_list")
public class TipsMessageList extends MessageData {

    interface ColumnName {
        String TIPS_MESSAGES_JSON = "tipsMessagesJson";
    }

    @Column(name = ColumnName.TIPS_MESSAGES_JSON)
    private String tipsMessagesJson;
    private ArrayList<TipsMessage> tipsMessages;

    public TipsMessageList() {
    }

    public TipsMessageList(String msgId, String tipsMessagesJson) {
        super(msgId);
        this.tipsMessagesJson = tipsMessagesJson;
    }

    public ArrayList<TipsMessage> getTipsMessages() {
        if (tipsMessages == null) {
            tipsMessages = new ArrayList<>();

            new JsonParser().parse(tipsMessagesJson).getAsJsonArray().forEach(new Consumer<JsonElement>() {
                @Override
                public void accept(JsonElement jsonElement) {
                    JsonObject jsonObject = jsonElement.getAsJsonObject();
                    TipsMessage tipsMessage = new TipsMessage();
                    if (jsonObject.has("type")) {
                        int type = jsonObject.get("type").getAsInt();
                        tipsMessage.setType(type);
                        int id = -1;
                        switch (type) {
                            case 1: // 用户
                                if (jsonObject.has("user_id")) {
                                    id = jsonObject.get("user_id").getAsInt();
                                }
                                if (jsonObject.has("role_id")) {
                                    tipsMessage.setRoldId(jsonObject.get("role_id").getAsInt());
                                }
                                break;
                            case 2: // 投票
                                if (jsonObject.has("vote_id")) {
                                    id = jsonObject.get("vote_id").getAsInt();
                                }
                                break;
                            case 3: // 活动
                                if (jsonObject.has("activity_id")) {
                                    id = jsonObject.get("activity_id").getAsInt();
                                }
                                break;
                        }
                        tipsMessage.setId(id);
                    }
                    if (jsonObject.has("keyword")) {
                        tipsMessage.setKeyword(jsonObject.get("keyword").getAsString());
                    }

                    tipsMessages.add(tipsMessage);
                }
            });
        }
        return tipsMessages;
    }

    @Override
    public MessageType getMessageType() {
        return MessageType.CHAT_TIPS;
    }
}
